/**
 * Git 提交消息规范使用示例
 * 展示如何在Agent代码中使用标准化的提交消息
 */

import { createDefaultAgentGit } from '../../src/utils/agent-git.js';
import {
  CommitMessageGenerator,
  CommitMessageTemplates,
  commitMessages,
} from '../../src/utils/commit-message-generator.js';

// ========================================
// 1. 基本使用示例
// ========================================

// 功能开发提交
const featureMessage = commitMessages.addFeature(
  '用户认证系统',
  ['实现JWT令牌认证', '添加用户登录/注册接口', '集成密码加密存储', '支持记住登录状态'],
  'auth'
);

console.log('功能开发提交消息：');
console.log(featureMessage);
console.log('\n' + '='.repeat(50) + '\n');

// Bug修复提交
const bugFixMessage = commitMessages.fixBug(
  '用户登录超时问题',
  '用户在登录时经常遇到超时，导致无法正常进入系统',
  'api',
  [123, 456]
);

console.log('Bug修复提交消息：');
console.log(bugFixMessage);
console.log('\n' + '='.repeat(50) + '\n');

// 文档更新提交
const docsMessage = commitMessages.updateDocs([
  '添加API接口文档',
  '更新安装指南',
  '补充使用示例',
  '修正错别字',
]);

console.log('文档更新提交消息：');
console.log(docsMessage);
console.log('\n' + '='.repeat(50) + '\n');

// ========================================
// 2. 高级模板使用
// ========================================

// 性能优化提交
const perfMessage = CommitMessageGenerator.generate(
  CommitMessageTemplates.performance(
    '数据库查询性能',
    ['添加查询索引', '优化SQL语句', '实现查询缓存', '减少N+1查询问题'],
    ['查询响应时间减少60%', '数据库CPU使用率降低40%', '并发处理能力提升3倍'],
    'database'
  )
);

console.log('性能优化提交消息：');
console.log(perfMessage);
console.log('\n' + '='.repeat(50) + '\n');

// 重构提交
const refactorMessage = CommitMessageGenerator.generate(
  CommitMessageTemplates.refactor(
    '用户服务层',
    '原有代码职责不明确，难以维护和测试',
    ['抽取UserRepository接口', '分离业务逻辑和数据访问', '添加依赖注入支持', '统一错误处理机制'],
    'user-service',
    '用户服务API接口参数格式已变更，需要更新客户端调用代码'
  )
);

console.log('重构提交消息：');
console.log(refactorMessage);
console.log('\n' + '='.repeat(50) + '\n');

// 版本发布提交
const releaseMessage = CommitMessageGenerator.generate(
  CommitMessageTemplates.release(
    'v2.1.0',
    ['用户认证系统', '文件上传功能', '实时通知系统'],
    ['修复登录超时问题', '解决文件上传失败问题', '优化界面响应速度'],
    ['API端点从/api/v1迁移到/api/v2', '配置文件格式已更改，需要重新配置']
  )
);

console.log('版本发布提交消息：');
console.log(releaseMessage);
console.log('\n' + '='.repeat(50) + '\n');

// ========================================
// 3. Agent自动化使用示例
// ========================================

async function agentAutomatedCommit() {
  const git = createDefaultAgentGit();

  // 使用标准化配置提交
  const result = await git.automatedWorkflow(
    'my-project',
    'Agent自动生成的项目',
    undefined, // 不使用自定义消息
    CommitMessageTemplates.feature('项目结构自动化生成', [
      '生成标准项目目录结构',
      '配置开发环境',
      '添加基础配置文件',
      '集成代码质量检查工具',
    ])
  );

  if (result.success) {
    console.log('✅ Agent自动化提交成功！');
    console.log(`仓库信息: ${result.repositoryInfo?.url}`);
  } else {
    console.log('❌ 提交失败:', result.error);
  }
}

// ========================================
// 4. 快捷提交消息示例
// ========================================

console.log('快捷提交消息示例：');
console.log('feat:', commitMessages.quick.feat('添加用户管理功能', 'admin'));
console.log('fix:', commitMessages.quick.fix('修复内存泄漏问题', 'core'));
console.log('docs:', commitMessages.quick.docs('更新API文档'));
console.log('test:', commitMessages.quick.test('添加单元测试', 'user'));
console.log('chore:', commitMessages.quick.chore('更新依赖版本'));
console.log('\n' + '='.repeat(50) + '\n');

// ========================================
// 5. 提交消息验证示例
// ========================================

const validationExamples = [
  'feat: 添加用户认证功能',
  'fix(api): 修复接口超时问题',
  'docs: 更新README文档',
  'feat: Add user authentication.', // 错误：英文句号
  'FIX: 修复bug', // 错误：大写类型
  'feat: 这是一个非常非常长的描述，超过了建议的50个字符限制，应该被标记为不符合规范', // 错误：描述过长
];

console.log('提交消息验证结果：');
validationExamples.forEach((message, index) => {
  const validation = CommitMessageGenerator.validate(message);
  console.log(`${index + 1}. "${message}"`);
  console.log(`   ${validation.valid ? '✅ 有效' : '❌ 无效'}`);
  if (!validation.valid) {
    validation.errors.forEach(error => console.log(`   - ${error}`));
  }
  console.log('');
});

// ========================================
// 6. 提交统计分析示例
// ========================================

const gitLogSample = `feat(auth): 添加用户认证系统
fix(api): 修复接口超时问题
docs: 更新项目文档
feat(ui): 实现用户界面
test(auth): 添加认证测试
chore(deps): 更新依赖包
perf(db): 优化数据库查询
refactor(core): 重构核心模块`;

const stats = CommitMessageGenerator.parseCommitStats(gitLogSample);
console.log('提交类型统计：');
Object.entries(stats)
  .filter(([_, count]) => count > 0)
  .sort(([_, a], [__, b]) => b - a)
  .forEach(([type, count]) => {
    console.log(`  ${type}: ${count}次`);
  });

console.log('\n📋 示例完成！');

// 如果作为脚本运行，执行Agent示例
if (import.meta.main) {
  console.log('\n🤖 执行Agent自动化提交示例...\n');
  // agentAutomatedCommit().catch(console.error);
  console.log('💡 要执行Agent示例，请取消注释上面一行代码');
}
